package leetcode_题库;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Ding
 * @create 2022/9/20 9:54
 */
public class _376_摆动序列 {

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
        System.err.println(wiggleMaxLength(arr));
    }

    /**
     * 贪心算法，比较前一个的峰值和当前峰值的差
     * > 2022/09/20 10:31:22
     * 解答成功:
     * 	执行耗时:0 ms,击败了100.00% 的Java用户
     * 	内存消耗:38.8 MB,击败了89.64% 的Java用户
     * @Description
     * @Author Ding
     * @Date 2022/9/20 10:31
     * @param nums
     * @return int
     **/
    public static int wiggleMaxLength(int[] nums) {
        //上一个峰值
        int preDiff = 0;
        //当前峰值
        int curDiff = 0;
        //计数器
        int cnt = 0;
        for (int i = 0; i < nums.length; i++) {
            //如果是第1个，我们默认它是摆动的（因为题目：仅有一个元素或者含两个不等元素的序列也视作摆动序列。）
            if (i == 0){
                cnt++;
                continue;
            }
            //当前峰值就是当前值与上一个值的差值
            curDiff = nums[i] - nums[i-1];
            //倘若，当前峰值和前一峰值为相反数或反之（这里有一个大前提，前一峰值可以为0，但后一峰值不可为0）
            if (curDiff < 0 && preDiff >= 0 || curDiff > 0 && preDiff <= 0 ){
                //计数器++，且赋值给新的preDiff
                cnt++;
                preDiff = curDiff;
            }
        }
        return cnt;
    }
}
